package com.nts.visionworks.core.format;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 날짜 및 시간을 세 가지 형식으로 나누어 재구성해주는 유틸리티로 Bean으로 사용된다.
 * {@link com.nts.visionworks.core.conversion.DateConverter DateConverter}와의 차이점은 bean 설정을 통한 형식 지정자를 통해 HTTP 파라메터가 아닌 임의의 데이터를 수정하는데 이용된다는 것이다.
 * @author Devcken
 */
public class DateTimeFormatter
{
	private final static Logger logger = LoggerFactory.getLogger(DateTimeFormatter.class);
	
	/**
	 * 기본 형식 지정자를 나타낸다.
	 */
	private static DateFormat _defaultDateFormat;
	
	/**
	 * 짧은 형식 지정자를 나타낸다.
	 */
	private static DateFormat _shortDateFormat;
	
	/**
	 * 긴 형식 지정자를 나타낸다.
	 */
	private static DateFormat _longDateFormat;
	
	/**
	 * 날짜와 시간을 기본 형식으로 재구성한다.
	 * @param date 변환하려는 날짜 및 시간을 설정한다.
	 * @return 재구성된 날짜/시간 형식을 반환한다.
	 */
	public static String toDefaultString(Date date)
	{
		return _defaultDateFormat.format(date);
	}
	
	/**
	 * 날짜와 시간을 짧은 형식으로 재구성한다.
	 * @param date 변환하려는 날짜 및 시간을 설정한다.
	 * @return 재구성된 날짜/시간 형식을 반환한다.
	 */
	public static String toShortString(Date date)
	{
		return _shortDateFormat.format(date);
	}
	
	/**
	 * 날짜와 시간을 긴 형식으로 재구성한다.
	 * @param date 변환하려는 날짜 및 시간을 설정한다.
	 * @return 재구성된 날짜/시간 형식을 반환한다.
	 */
	public static String toLongString(Date date)
	{
		return _longDateFormat.format(date);
	}
	
	public void setDefaultDateFormat(String format)
	{
		try
		{
			DateTimeFormatter._defaultDateFormat = new SimpleDateFormat(format);
		}
		catch (Exception error)
		{
			logger.error(error.getMessage(), error);
		}
	}
	
	public void setShortDateFormat(String format)
	{
		try
		{
			DateTimeFormatter._shortDateFormat = new SimpleDateFormat(format);
		}
		catch (Exception error)
		{
			logger.error(error.getMessage(), error);
		}
	}
	
	public void setLongDateFormat(String format)
	{
		try
		{
			DateTimeFormatter._longDateFormat = new SimpleDateFormat(format);
		}
		catch (Exception error)
		{
			logger.error(error.getMessage(), error);
		}
	}
}